/**
 * 正则表达式验证工具包
 * @author 超级小富翁
 * @param params 参数
 * @return patternAndObject 自定义传入表达式和对象验证
 * @return integer 整数
 * @return positiveInteger 正整数，不包含0
 * @return negativeInteger 负整数，不包含0
 * @return notPositiveInteger 非正整数，包含0
 * @return notNegativeInteger 非负整数，包含0
 * @return floatNumber 浮点数
 * @return positiveFloat 正浮点数，不包含0
 * @return negativeFloat 负浮点数，不包含0
 * @return notPositiveFloat 非正浮点数，包含0
 * @return notNegativeFloat 非负浮点数，包含0
 * @return email Email地址
 * @return fixedTelephone 固定电话，正确格式为：XXXX-XXXXXXX，XXXX-XXXXXXXX，XXX-XXXXXXX，XXX-XXXXXXXX，XXXXXXX，XXXXXXXX
 * @return mobileTelephone 移动电话，1开头的11位数字
 * @return chinese 是否含有中文字符，包括中文标点符号
 * @return lengthScope 长度范围，min：最小长度，max：最大长度
 * @return idCard 身份证号码，身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
 * @return noSpecialChar 非特殊字符，只能包括数字、小写字母和大写字母
 */
function validationUtil(params) {
	if(isEmpty(params)) {
		params = {};
	}
	// 传入一个对象判断是否为空
	function isEmpty(obj) {
		if(obj == null || obj == undefined || typeof obj == "undefined" || obj.length == 0) { //|| $.trim(obj).length == 0
			return true;
		}
		return false;
	}
	// 验证正则表达式和对象
	function validationRegExp(pattern, obj) {
		if(!isEmpty(params.flags)) {
			/**
			 * flags: g （全文查找出现的所有 pattern） 
					i （忽略大小写） 
					m （多行查找）
			 */
			eval("pattern = " + pattern + params.flags);
		}
		var re = new RegExp(pattern);
		return re.test(obj);
	}

	return {
		// 自定义传入表达式和对象验证
		patternAndObject: function(pattern, obj) {
			return validationRegExp(pattern, obj);
		},
		// 整数
		integer: function(obj) {
			var pattern = /^-?\d+$/;
			return validationRegExp(pattern, obj);
		},
		// 正整数，不包含0
		positiveInteger: function(obj) {
			var pattern = /^\+?[1-9][0-9]*$/;
			return validationRegExp(pattern, obj);
		},
		// 负整数，不包含0
		negativeInteger: function(obj) {
			var pattern = /^\-[1-9][0-9]*$/;
			return validationRegExp(pattern, obj);
		},
		// 非正整数，包含0
		notPositiveInteger: function(obj) {
			var pattern = /^((-\d+)|(0+))$/;
			return validationRegExp(pattern, obj);
		},
		// 非负整数，包含0
		notNegativeInteger: function(obj) {
			var pattern = /^\d+$/;
			return validationRegExp(pattern, obj);
		},
		// 浮点数
		floatNumber: function(obj) {
			var pattern = /^(-?\d+)(\.\d+)?$/;
			return validationRegExp(pattern, obj);
		},
		// 正浮点数，不包含0
		positiveFloat: function(obj) {
			var pattern = /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
			return validationRegExp(pattern, obj);
		},
		// 负浮点数，不包含0
		negativeFloat: function(obj) {
			var pattern = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
			return validationRegExp(pattern, obj);
		},
		// 非正浮点数，包含0
		notPositiveFloat: function(obj) {
			var pattern = /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;
			return validationRegExp(pattern, obj);
		},
		// 非负浮点数，包含0
		notNegativeFloat: function(obj) {
			var pattern = /^\d+(\.\d+)?$/;
			return validationRegExp(pattern, obj);
		},
		// Email地址
		email: function(obj) {
			var pattern = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
			return validationRegExp(pattern, obj);
		},
		// 固定电话，正确格式为：XXXX-XXXXXXX，XXXX-XXXXXXXX，XXX-XXXXXXX，XXX-XXXXXXXX，XXXXXXX，XXXXXXXX
		fixedTelephone: function(obj) {
			var pattern = /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/;
			return validationRegExp(pattern, obj);
		},
		// 移动电话，1开头的11位数字
		mobileTelephone: function(obj) {
			var pattern = /^1[0-9]{10}$/;
			return validationRegExp(pattern, obj);
		},
		// 是否含有中文字符，包括中文标点符号
		chinese: function(obj) {
			var pattern = /[^\x00-\xff]*/;
			return validationRegExp(pattern, obj);
		},
		// 长度范围，min：最小长度，max：最大长度
		lengthScope: function(obj, min, max) {
			if(isEmpty(max)) {
				max = 0;
			}
			if(isEmpty(min)) {
				min = 0;
			}
			eval("pattern = /^\\S{" + min + "," + max + "}$/");
			return validationRegExp(pattern, obj);
		},
		// 身份证号码，身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
		idCard: function(obj) {
			var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
			return validationRegExp(pattern, obj);
		},
		// 非特殊字符，只能包括数字、小写字母和大写字母，并且不能为空
		noSpecialChar: function(obj) {
			var pattern = /^[0-9a-zA-Z]+$/;
			return validationRegExp(pattern, obj);
		}
	};
}